package z.farrell.framework.exceptions.base;

/**
 * 所有的checked异常的基类
 * @author farrell
 * @create 2016-10-25
 */
public class BaseCheckedException extends Exception{

    /**
     * 序列化
     * @author farrell
     * @Date 2016/10/25 15:34
     */
    private static final long serialVersionUID = 4800401988306491429L;

    private IExceptionCodeMessage exceptionCodeMessage;

    /**
     * 无参的构造方法
     * @author farrell
     * @Date 2016/10/25 15:36
     */
    public BaseCheckedException() {
        super();
    }

    /**
     * 构造方法
     * @param message 出现异常提示信息
     * @param cause 抛出的异常
     * @author farrell
     * @Date 2016/10/25 15:37
     */
    public BaseCheckedException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 构造方法
     * @param message 出现异常抛出的提示信息
     * @author farrell
     * @Date 2016/10/25 15:39
     */
    public BaseCheckedException(String message) {
        super(message);
    }

    /**
     * 构造方法
     * @param cause 抛出的异常
     * @author farrell
     * @Date 2016/10/25 15:39
     */
    public BaseCheckedException(Throwable cause) {
        super(cause);
    }

    /**
     * 构造方法
     * @param exceptionCodeMessage 自定义的异常枚举接口
     * @author farrell
     * @Date 2016/10/25 15:40
     */
    public BaseCheckedException(IExceptionCodeMessage exceptionCodeMessage) {
        this.exceptionCodeMessage = exceptionCodeMessage;
    }

    /**
     * 构造方法
     * @param cause 抛出的异常
     * @param exceptionCodeMessage 自定义异常枚举接口
     * @author farrell
     * @Date 2016/10/25 15:40
     */
    public BaseCheckedException(Throwable cause, IExceptionCodeMessage exceptionCodeMessage) {
        super(cause);
        this.exceptionCodeMessage = exceptionCodeMessage;
    }

    public BaseCheckedException(final String code, final String message){

        this(new IExceptionCodeMessage() {
            public String getCode() {
                return code;
            }

            public String getMessage() {
                return message;
            }
        });
    }

    public IExceptionCodeMessage getExceptionCodeMessage() {
        return exceptionCodeMessage;
    }
}
